مشکل در Redirect و ماندن در صفحه لاگین در Asp.net Core
سلام دوستان. بنده یک فرم لاگین دارم که بعد از لاگین کاربر باید به Area مخصوص به خودش Redirect بشه. هر کاربر یک Role هم داره که وقتی لاگین میکنه نقش کاربر هم مشخص هست.
دستوراتی که برای لاگین نوشتم :
public async Task<IActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, true, lockoutOnFailure: false);
if (result.Succeeded)
{
if (user.UserType == 1)
{
return Redirect("/AdminPanel/Admin/Index");
}
}
else
{
ModelState.AddModelError("Password", "اطلاعات ورود صحیح نیست");
return View(model);
}
}
return View(model);
}
در دستور بالا همونطوری که می بینید بعد از اینکه UserName و Password درست بود باید به مسیر مشخص شده ریدایرکت بشه. ولی در همون صفحه لاگین میمونه.
کنترلر AdminController
[Area("AdminPanel")]
[Authorize(Roles = "AdminArea")]
public class AdminController : Controller
{
public IActionResult Index()
{
return View();
}
}
در کلاس Startup
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseAuthentication();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
//AdminPanel
endpoints.MapAreaControllerRoute(
"AdminPanel",
"AdminPanel",
"AdminPanel/{controller=Admin}/{action=Index}/{id?}");
//TeacherPanel
//default
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Account}/{action=Login}/{id?}");
});
}
پاسخ هوش مصنوعی
به نظر می رسد که شما در کنترلر لاگین، متغیر user را تعریف نکرده اید، که باعث می شود چک کردن نوع کاربر (UserType) به درستی عمل نکند و از این رو ریدایرکت انجام نشود. ابتدا باید کاربر را با استفاده از نام کاربری بازیابی کنید و سپس به نوع کاربر آن دسترسی پیدا کنید. برای این کار می توانید کد را به شکل زیر اصلاح کنید:
public async Task<IActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var user = await _userManager.FindByNameAsync(model.UserName);
if (user == null)
{
ModelState.AddModelError("UserName", "کاربر یافت نشد");
return View(model);
}
var result = await _signInManager.PasswordSignInAsync(user, model.Password, true, lockoutOnFailure: false);
if (result.Succeeded)
{
if (user.UserType == 1) // یا نوع مورد نظر دیگر
{
return Redirect("/AdminPanel/Admin/Index");
}
}
else
{
ModelState.AddModelError("Password", "اطلاعات ورود صحیح نیست");
return View(model);
}
}
return View(model);
}
همچنین، مطمین شوید که متد UseAuthentication() قبل از UseAuthorization() در متد Configure کلاس Startup قرار دارد، که در کد شما به درستی انجام شده است:
app.UseAuthentication();
app.UseAuthorization();
با این تغییرات، پس از ورود موفقیت آمیز، کاربر باید به صفحه مشخص شده (در اینجا "/AdminPanel/Admin/Index") ریدایرکت شود.
دستوراتی که نوشتید درسته. فقط کافیه در Startup.cs و در متد Configure جای دو میان افزار UseAuthentication و UseAuthorization رو عوض کنید.
//1
app.UseAuthentication();
//2
app.UseAuthorization();
ترتیب به کارگیری این دو میان افزار مهمه.
- چه کسانی استوری تلگرام را می بینند ؟
- برای کسب و کار تلگرام پرمیوم بهتره یا واتس اپ بیزینس ؟
- جلوگیری از انتشار غیرمجاز مطالب در کانال های تلگرامی
- تفاوت های تلگرام و واتس اپ چیست ؟
- چرا استوری های واتس اپ برای دوستان نمایش داده نمیشن ؟
- چند تا استوری رایگان می تونیم تلگرام بذاریم ؟
- خطای Severity Code Description Project هنگام استارت پروژه
- کار نکردن navBar و sideBar در پروژه Asp.net core
- خطا موقع استفاده از Api در سی شارپ
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2